// Demo.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "Demo.h"
// #include "UIManager.h"
// #include "UIImgSplit.h"
// #include "UIImgInterface.h"

#include "UIManager.h"
#include "UIFrame.h"
#include "UIHookWindow.h"

#pragma comment(lib,"E:\\Project\\CoolUI\\Debug\\CoolUI.lib")
#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;								// current instance
TCHAR szTitle[MAX_LOADSTRING];					// The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];			// the main window class name

CUIFrame* pFrame = NULL;

// Forward declarations of functions included in this code module:
ATOM				MyRegisterClass( HINSTANCE hInstance );
BOOL				InitInstance( HINSTANCE, int );
LRESULT CALLBACK	WndProc( HWND, UINT, WPARAM, LPARAM );
INT_PTR CALLBACK	About( HWND, UINT, WPARAM, LPARAM );

int APIENTRY _tWinMain( HINSTANCE hInstance,
                        HINSTANCE hPrevInstance,
                        LPTSTR    lpCmdLine,
                        int       nCmdShow )
{

    UNREFERENCED_PARAMETER( hPrevInstance );
    UNREFERENCED_PARAMETER( lpCmdLine );

    // TODO: Place code here.
    MSG msg;
    HACCEL hAccelTable;

    // Initialize global strings
    LoadString( hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING );
    LoadString( hInstance, IDC_DEMO, szWindowClass, MAX_LOADSTRING );
    MyRegisterClass( hInstance );

    // Perform application initialization:
    if ( !InitInstance( hInstance, nCmdShow ) )
    {
        return FALSE;
    }

    hAccelTable = LoadAccelerators( hInstance, MAKEINTRESOURCE( IDC_DEMO ) );

    // Main message loop:
    while ( GetMessage( &msg, NULL, 0, 0 ) )
    {
        if ( !TranslateAccelerator( msg.hwnd, hAccelTable, &msg ) )
        {
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
    }

    return ( int ) msg.wParam;
}



//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage are only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass( HINSTANCE hInstance )
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof( WNDCLASSEX );

    wcex.style			= CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc	= WndProc;
    wcex.cbClsExtra		= 0;
    wcex.cbWndExtra		= 0;
    wcex.hInstance		= hInstance;
    wcex.hIcon			= LoadIcon( hInstance, MAKEINTRESOURCE( IDI_DEMO ) );
    wcex.hCursor		= LoadCursor( NULL, IDC_ARROW );
    wcex.hbrBackground	= ( HBRUSH )( COLOR_WINDOW + 1 );
    wcex.lpszMenuName	= MAKEINTRESOURCE( IDC_DEMO );
    wcex.lpszClassName	= szWindowClass;
    wcex.hIconSm		= LoadIcon( wcex.hInstance, MAKEINTRESOURCE( IDI_SMALL ) );

    return RegisterClassEx( &wcex );
}

//
//   FUNCTION: InitInstance(HINSTANCE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow )
{
    HWND hWnd;

    hInst = hInstance; // Store instance handle in our global variable

    hWnd = CreateWindow( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
                         CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL );

    if ( !hWnd )
    {
        return FALSE;
    }

//    UIManager=CUIManager::Create();
//    m_pImg=UIManager->CreateUIImgRender();
//    m_pImg->LoadImg(_T("E:\\Project\\CoolUI\\Demo\\Skin\\windowBkg.bmp"));

//   m_pSplit=new CUIImgSplit();
//    m_pSplit->AddSplitBlock(new CUIImgSplitBlock(0,0,100,100,STRETCH_HORIZONTAL,0.5));
//    m_pSplit->AddSplitBlock(new CUIImgSplitBlock(100,0,100,100,STRETCH_HORIZONTAL,2));
//   m_pImg->SplitImage(m_pSplit);

    CUIManager::Init();
    CUIManager::Skin();

    ShowWindow( hWnd, nCmdShow );
    UpdateWindow( hWnd );

    return TRUE;
}

//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND	- process the application menu
//  WM_PAINT	- Paint the main window
//  WM_DESTROY	- post a quit message and return
//
//
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

    switch ( message )
    {
    case WM_COMMAND:
        wmId    = LOWORD( wParam );
        wmEvent = HIWORD( wParam );

        // Parse the menu selections:
        switch ( wmId )
        {
        case IDM_ABOUT:
            DialogBox( hInst, MAKEINTRESOURCE( IDD_ABOUTBOX ), hWnd, About );
            break;

        case IDM_EXIT:
            DestroyWindow( hWnd );
            break;

        default:
            return DefWindowProc( hWnd, message, wParam, lParam );
        }

        break;

    case WM_PAINT:
        hdc = BeginPaint( hWnd, &ps );
        RECT rcClient;
        GetClientRect( hWnd, &rcClient );
//		m_pImg->SetPosition(100,0);
//		m_pImg->SetSize(rcClient.right-rcClient.left,rcClient.bottom-rcClient.top);
//		m_pImg->Draw(hdc);
        EndPaint( hWnd, &ps );
        break;

    case WM_DESTROY:
    {
        CUIManager::UnInit();

        PostQuitMessage( 0 );
// 			delete UIManager;
// 			UIManager=NULL;
    }

    break;

    default:
        return DefWindowProc( hWnd, message, wParam, lParam );
    }

    return 0;
}

// Message handler for about box.
INT_PTR CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
    UNREFERENCED_PARAMETER( lParam );

    switch ( message )
    {
    case WM_INITDIALOG:
        return ( INT_PTR )TRUE;

    case WM_COMMAND:
        if ( LOWORD( wParam ) == IDOK || LOWORD( wParam ) == IDCANCEL )
        {
            EndDialog( hDlg, LOWORD( wParam ) );
            return ( INT_PTR )TRUE;
        }

        break;
    }

    return ( INT_PTR )FALSE;
}
